iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

覆蓋機制對屬性的工作方式與對方法的工作方式相同。
在超類別上聲明的屬性於創建物件時要重新聲明必須以 override 開頭,並且它們必須具有相同的類型。
每個聲明的屬性都可以被具有初始化程序的屬性或具有 get 方法的屬性覆蓋:

open class Shape {
    open val vertexCount: Int = 0
}

class Rectangle : Shape() {
    override val vertexCount = 4
}

您也可以使用 var 屬性覆蓋 val 屬性,但反之則不行。
這是允許的,因為 val 屬性本質上聲明了一個 get 方法,並且將其覆蓋為 var 還會在派生類中另外聲明一個 set 方法。

請注意,您可以在主構造函數中使用 override 關鍵字作為屬性聲明的一部分:

interface Shape {
    val vertexCount: Int
}

class Rectangle(override val vertexCount: Int = 4) : Shape // Always has 4 vertices

class Polygon : Shape {
    override var vertexCount: Int = 0  // Can be set to any number later
}

Reference


上一篇
[Day 18] 覆蓋方法
下一篇
[Day 20] 抽象類別 (abstract class)
系列文
從0開始的Kotlin學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言